package com.beantools.util;

import static com.beantools.util.ObjectUtil.isNull;
import static com.beantools.util.StringUtil.firstLetterToLower;
import static com.beantools.util.StringUtil.isBlank;

/**
 * 处理与类有关的信息,比如根据对象获取类名称；将类名的首字母转为小写
 *
 * @author baoya
 * @version 1.0
 * @since 1.1.0
 */

public class ClassUtil<T> {

    /**
     * 根据当前类对象获取类名，并将类名的首字母转为小写
     *
     * @param t 当前类对象
     * @return 首字母转为小写的类名
     */
    public static <T> String getClassNameByGenericity(T t) {
        if (isNull(t)) {
            throw new IllegalArgumentException("参数错误t=" + t);
        }
        Class<?> clazz = t.getClass();
        String className = clazz.getName();
        className = className.substring(className.lastIndexOf(".") + 1, className.length());
        return firstLetterToLower(className);
    }

    /**
     * 将类名的首字母转化为小写
     *
     * @param clazz 当前类字面常量
     * @return 首字母小写的类名
     */
    public static <T> String getClassNameByClass(Class<T> clazz) {
        return isNull(clazz) ? null : getClassName(clazz.getSimpleName());
    }

    /**
     * 将类名的首字母转化为小写
     *
     * @param className 调用者指定的类名
     * @return 首字母小写的类名
     */
    public static String getClassName(String className) {
        return isBlank(className) ? null : firstLetterToLower(className);
    }
}
